<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    // 会销毁的函数执行空间
    // function fn(){
    //     let a = 10;
    //     console.log(a);
    // }
    // fn();
    // console.log(a);


    // 不会销毁的函数执行空间
    // 1. 函数内返回一个复杂数据类型
    // function fn(){
    //     let a = 10;
    //     const obj = {
    //         a,
    //         show(){
    //             console.log(obj.a);
    //         }
    //     }
    //     return obj;
    // }
    // 2. 在函数外部执行时，有变量接收函数内部返回的复杂数据
    // const f = fn();
    // f.a = 20;
    // console.log(f);
    // console.log(f.a);
    // f.show();


    // =======

    // 应用

    // 现状
    // function fn(){
    //     let a = 10;
    //     a++;
    //     console.log(a);
    // }
    // fn();
    // fn();
    // fn();
    // fn();

    // 需求：要求，每次执行在上次执行的结果上+1
    // let a = 10;
    // function fn(){
    //     a++;
    //     console.log(a);
    // }
    // fn();
    // fn();
    // fn();
    // fn();

    // 不允许出现全局变量
    // ;const f = (function(){
    //     let a = 10;
    //     function fn(){
    //         a++;
    //         console.log(a);
    //     }
    //     return fn;
    // })();

    // f();
    // f();
    // f();
    // f();

    // 返回值返回到当前函数的执行语句身上
    // 匿名函数的返回值返回到匿名函数的执行语句身上

    // =====

    


    
    
</script>
</html>